﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Servicios;
using Dominio;
using UI.Miembros;

namespace UI
{
    public partial class MetodosIndexacion : System.Web.UI.Page
    {
        IMetodoIndexacionService metodoIndexacionService = FabricaDeServicios.ObtenerInstancia().ObtenerMetodoIndexacionService();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                if (Session[ConstantesDeSesion.Usuario] != null)
                {
                    Usuario usuario = (Usuario)Session[ConstantesDeSesion.Usuario];
                    if (((Security)Session[ConstantesDeSesion.Security]).RolPermitido(usuario.Rol, ConstantesFuncionalidades.MetodoIndexacion))
                    {
                        IList<MetodoIndexacion>  metodos = metodoIndexacionService.ObtenerTodos();
                        this.DropDownListMetodos.DataSource = metodos;
                        this.DropDownListMetodos.DataBind();
                    }
                    else
                    {
                        //Usuario  no autorizado
                        WebUtils.MsgBox("Usuario no Autorizado");
                        Response.Redirect("~/Miembros/Busquedas.aspx");
                    }
                }
                else
                {
                    //Usuario no autenticado
                    WebUtils.MsgBox("Usuario no Autenticado");
                    Response.Redirect("~/Login.aspx");
                }
            }
        }

        protected void Seleccionar_Click(object sender, EventArgs e) 
        {
            try
            {
                IList<MetodoIndexacion> metodos = metodoIndexacionService.ObtenerTodos();
                //Instanciamos uno y le seteamos el nombre para comparar con equals.
                MetodoIndexacion metodoSeleccionado = new MetodoIndexacion();
                metodoSeleccionado.NombreClase = this.DropDownListMetodos.SelectedValue;
                foreach (MetodoIndexacion metodo in metodos) {
                    if (metodo.Equals(metodoSeleccionado)) {
                        //si lo encontramos sobreescribimos la variable para tener el resto de los parametros
                        metodoSeleccionado = metodo;
                        break;
                    }
                }

                if (!metodoIndexacionService.ObtenerMetodoActivo().Equals(metodoSeleccionado))
                {
                    metodoIndexacionService.ActivarMetodoDeIndexacion(metodoIndexacionService.ObtenerIndexServicePorMetodoIndexacion(metodoSeleccionado));
                    WebUtils.MsgBox("Metodo de indexacion modificado correctamente");
                }
                else {
                    WebUtils.MsgBox("El metodo de indexacion seleccionado ya esta en uso");
                }
            }
            catch (Exception ex) {
                WebUtils.MsgBox(ConstantesDeMensajes.ErrorInterno);
            }

        }
    }
}